package com.alg.pattern.interfaces;

import com.alg.pattern.interfaces.color.White;
import com.alg.pattern.interfaces.shapes.Circle;

/**
 * 桥接（Bridge）模式的定义如下：将抽象与实现分离，使它们可以独立变化。它是用组合关系代替继承关系来实现，从而降低了抽象和实现这两个可变维度的耦合度。
 *
 * 假如你有一个几何形状（Shape）类， 从它能扩展出两个子类： 圆形（Circle）和方形（Square）。你希望对这样的类层次结构进行扩展以使其包含颜色， 所以你打算创建名为红色（Red）和蓝色（Blue）的形状子类。但是，由于你已有两个子类，所以总共需要创建四个类才能覆盖所有组合，例如蓝色圆形（BlueCircle）和红色方形（RedSquare）。
 * 在层次结构中新增形状和颜色将导致代码复杂程度指数增长。例如添加三角形状，你需要新增两个子类，也就是每种颜色一个；此后新增一种新颜色需要新增三个子类，即每种形状一个。如此以往，情况会越来越糟糕。
 * 解决办法：
 * 问题的根本原因是我们试图在两个独立的维度——形状与颜色——上扩展形状类。这在处理类继承时是很常见的问题。
 * 桥接模式通过将继承改为组合的方式来解决这个问题。
 *
 * @ClassName Client
 * @Author Jiayi Zheng
 * @Date 2022/12/29 16:25
 * @Description: todo
 * @Version V1.0
 */
public class Client {

    public static void main(String[] args) {
        // 白色
        Color white = new White();
        // 圆形
        Shape square = new Circle();
        //白色的圆形
        square.setColor(white);
        square.draw();


    }

}
